\chapter{Besoins fonctionnels}
\paragraph{}Nous avons définis avec Mr Jubertie les fonctionnalités qui doivent être nécessairement présentes dans le système à rendre finalement, à savoir une bibliothèque permettant de fournir une fonction générique d'application de convolution. 
\paragraph{}De manière plus particulière, il nous est demandé de fournir une solution à base de convolution pour un problème d'écoulement de fluide, diffusion de chaleur et détection de Sobel.
\section{Fonction de convolution CUDA}
\subsection*{Description :} Le but ici est d'avoir un code générique permettant d'appliquer des convolutions 2D sur n'importe quelle entrée en tirant partie de l'accélération par GPU.
\subsection*{Justification :} C'est la demande principale du client. La nécessité est bien entendu la généricité du code qui permettrait de traiter une grande part des principaux problèmes en imagerie.
\section{Découpage de données : }
\subsection*{Description :} Nous devons définir une solution efficace pour le découpage de l'entrée sur la carte graphique afin de limiter au maximum les transferts de mémoire et d'appliquer les algorithmes en parallèle sur un grand nombre d'unités de calcul.
\subsection*{Justification :} Il est nécessaire de définir une solution de découpage qui permet d'appliquer les algorithmes ``par blocs'', cela se justifie en terme d'efficacité par la nécessité de réduire les transferts mémoire au minimum car ils ralentiraient énormément la vitesse d'application du programme.
\section{Sobel, Ecoulement de fluide, Diffusion de Chaleur}
\subsection*{Description :} Les trois algorithmes suivants doivent apparaître comme exemple d'utilisation de notre bibliothèque :
\begin{itemize}
\item Une détection de bord de Sobel
\item Une simulation d'écoulement de fluide
\item Une simulation de diffusion de chaleur
\end{itemize}
\paragraph{}Ces trois problèmes devront être traiter en utilisant un procédé de convolution ou une combinaison de convolution.
\subsection*{Justification :} Cette part du travail est d'un côté une demande explicite du client, mais aussi, pour les algorithmes de fluide et de chaleur, une manière de tester la rapidité (et par conséquent la pertinence) de l'application de ces algorithmes par convolution plutôt que par une manière plus ``classique''.
\section{Gestion des bords}
\subsection*{Description :} Il devra être possible pour l'utilisateur de choisir sa manière de gérer les bords (voir même de la définir lui même pour l'intégrer au code générique).
\subsection*{Justification :} Selon le problème à traiter la gestion des bords pourra être différente, c'est pour cela qu'il convient de laisser à l'utilisateur le choix de celle-ci (utiliser notre modèle générique ou l'implémenter lui-même).
